<?php
namespace app\api\controller;

use app\api\controller\Sample;
use app\common\controller\ApiController;
use think\App;
use \app\admin\traits\Curd;
use think\facade\Db;
use app\api\controller\Adv;
use app\api\model\User as ModelUser;
use PhpOffice\PhpSpreadsheet\Reader\Xls\MD5;
use think\facade\Env;

class Easemob extends ApiController
{
    protected $noNeedLogin = [
        "getToken",
        "createUser",
        "getUser",
        "getUsers",
        "getUsersForPage",
        "isOnline",
        "showFriends",
        "addFriend",
        "createGroup",
        "getGroupUsers",
        "getGroupsForUser",
        "getGroupDetail",
        "addGroupMember",
        "deleteGroupMember"
        
    ];
    protected $mustLogin = [];
    protected $counter = 0;
    private $client_id;
    private $client_secret;
    private $org_name;
    private $app_name;
    private $url;

    use \app\admin\traits\Curd;
    public function __construct(App $app)
    {

        parent::__construct($app);
        //APPKEY  1105201105148640#demo
        $this->client_id = env('im.clientid');//YXA67Y7RlN_JQvyUr7ql3aPgYA
        $this->client_secret = env('im.clientsecret');//YXA6fuTrKOjAu-SLWMTUpOqfYvEBf7s
        $this->org_name = env('im.orgname');//1105201105148640
        $this->app_name = Env::get('im.appname');//demo
    
        if (! empty ( $this->org_name ) && ! empty ( $this->app_name )) {
            $this->url = 'https://a1.easemob.com/' . $this->org_name . '/' . $this->app_name . '/';
        }
    }
        /*
         *获取token
         */
        function getToken()
        {
            $options=array(
                "grant_type"=>"client_credentials",
                "client_id"=>$this->client_id,
                "client_secret"=>$this->client_secret,
                "ttl"=>60
            );
            //json_encode()函数，可将PHP数组或对象转成json字符串，使用json_decode()函数，可以将json字符串转换为PHP数组或对象
            $body=json_encode($options);
            //使用 $GLOBALS 替代 global
            $url=$this->url.'token';
          
            //$url=$base_url.'token';
            $tokenResult = $this->postCurl($url,$body,$header=array());
            // return $tokenResult;
            //$access_token = "Bearer ".$tokenResult['access_token'];
            //dump($access_token);die;
            return "Authorization:Bearer ".$tokenResult['access_token'];
         
     
        }
        /**
         * 授权注册
         */
        function createUser(){
            $param = $this->request->param();
            $url=$this->url.'users';
            $options=array(
                "username"=>$param["username"],
                "password"=>$param["password"],
                "nickname"=>$param["nickname"]
            );
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header);
            if(empty($result["error_description"])){
                $this->success("注册成功",$result);
            }else{
                $this->error("注册失败",$result);
            }
        }
        /**
         * 批量注册用户
         */
        function createUsers($options){
            $url=$this->url.'users';
     
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /**
         * 重置用户密码
         */
        function resetPassword($username,$newpassword){
            $url=$this->url.'users/'.$username.'/password';
            $options=array(
                "newpassword"=>$newpassword
            );
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,"PUT");
            return $result;
        }
     
        /**
         * 获取单个用户
         */
        function getUser(){
            $param = $this->request->param();
            $url=$this->url.'users/'.$param["username"];
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            $this->success("获取成功",$result);
        }
        /**
         * 获取批量用户----不分页
         */
        function getUsers($limit=0){
            if(!empty($limit)){
                $url=$this->url.'users?limit='.$limit;
            }else{
                $url=$this->url.'users';
            }
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            $this->success("获取成功",$result);
        }
        /**
         * 获取批量用户---分页
         */
        function getUsersForPage($limit=0,$cursor=''){
            $url=$this->url.'users?limit='.$limit.'&cursor='.$cursor;
     
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            if(!empty($result["cursor"])){
                $cursor=$result["cursor"];
                $this->writeCursor("userfile.txt",$cursor);
            }
            $this->success("获取成功",$result);
            //var_dump($GLOBALS['cursor'].'00000000000000');
            //return $result;
        }

         //创建文件夹
        function mkdirs($dir, $mode = 0777)
        {
            if (is_dir($dir) || @mkdir($dir, $mode)) return TRUE;
            if (!$this->mkdirs(dirname($dir), $mode)) return FALSE;
            return @mkdir($dir, $mode);
        }
        //写入cursor
        function writeCursor($filename,$content){
            //判断文件夹是否存在，不存在的话创建
            if(!file_exists("resource/txtfile")){
                $this->mkdirs("resource/txtfile");
            }
            $myfile=@fopen("resource/txtfile/".$filename,"w+") or die("Unable to open file!");
            @fwrite($myfile,$content);
            fclose($myfile);
        }
        //读取cursor
        function readCursor($filename){
            //判断文件夹是否存在，不存在的话创建
            if(!file_exists("resource/txtfile")){
                $this->mkdirs("resource/txtfile");
            }
            $file="resource/txtfile/".$filename;
            $fp=fopen($file,"a+");//这里这设置成a+
            if($fp){
                while(!feof($fp)){
                    //第二个参数为读取的长度
                    $data=fread($fp,1000);
                }
                fclose($fp);
            }
            return $data;
        }
      
        /*
            删除单个用户
        */
        function deleteUser($username){
            $url=$this->url.'users/'.$username;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            删除批量用户
            limit:建议在100-500之间，、
            注：具体删除哪些并没有指定, 可以在返回值中查看。
        */
        function deleteUsers($limit){
            $url=$this->url.'users?limit='.$limit;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
     
        }
        /*
            修改用户昵称
        */
        function editNickname($username,$nickname){
            $url=$this->url.'users/'.$username;
            $options=array(
                "nickname"=>$nickname
            );
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'PUT');
            return $result;
        }
        /*
            修改用户头像
        */
        function editAvatar($username,$avatar){
            $url=$this->url.'users/'.$username;
            $options=array(
                "avatar"=>$avatar
            );
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'PUT');
            return $result;
        }
        /*
            添加好友-
        */
        function addFriend(){
            $param = $this->request->param();
            $url=$this->url.'users/'.$param["username"].'/contacts/users/'.$param["friend_name"];
            $header=array($this->getToken(),'Content-Type:application/json');
            $result=$this->postCurl($url,'',$header,'POST');
            $this->success("添加成功",$result);
            //return $result;
        }
     
     
        /*
            删除好友
        */
        function deleteFriend($username,$friend_name){
            $url=$this->url.'users/'.$username.'/contacts/users/'.$friend_name;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
     
        }
        /*
            查看好友
        */
        function showFriends(){
            $param = $this->request->param();
            $url=$this->url.'users/'.$param["username"].'/contacts/users';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            $this->success("获取成功",$result);
        //    return $result;
     
        }
        /*
            查看用户黑名单
        */
        function getBlacklist($username){
            $url=$this->url.'users/'.$username.'/blocks/users';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
     
        }
        /*
            往黑名单中加人
        */
        function addUserForBlacklist($username,$usernames){
            $url=$this->url.'users/'.$username.'/blocks/users';
            $body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'POST');
            return $result;
     
        }
        /*
            从黑名单中减人
        */
        function deleteUserFromBlacklist($username,$blocked_name){
            $url=$this->url.'users/'.$username.'/blocks/users/'.$blocked_name;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
     
        }
        /*
           查看用户是否在线
        */
        function isOnline(){
            $param = $this->request->param();
            $url=$this->url.'users/'.$param["username"].'/status';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            $this->success("获取成功",$result);
            return $result;
     
        }
        /*
            查看用户离线消息数
        */
        function getOfflineMessages($username){
            $url=$this->url.'users/'.$username.'/offline_msg_count';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
     
        }
        /*
            查看某条消息的离线状态
            ----deliverd 表示此用户的该条离线消息已经收到
        */
        function getOfflineMessageStatus($username,$msg_id){
            $url=$this->url.'users/'.$username.'/offline_msg_status/'.$msg_id;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
     
        }
        /*
            禁用用户账号
        */
        function deactiveUser($username){
            $url=$this->url.'users/'.$username.'/deactivate';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header);
            return $result;
        }
        /*
            解禁用户账号
        */
        function activeUser($username){
            $url=$this->url.'users/'.$username.'/activate';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header);
            return $result;
        }
     
        /*
            强制用户下线
        */
        function disconnectUser($username){
            $url=$this->url.'users/'.$username.'/disconnect';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        //--------------------------------------------------------上传下载
        /*
            上传图片或文件
        */
        function uploadFile($filePath){
            $url=$this->url.'chatfiles';
            $file=file_get_contents($filePath);
            $body['file']=$file;
            $header=array('enctype:multipart/form-data',$this->getToken(),"restrict-access:true");
            $result=$this->postCurl($url,$body,$header,'XXX');
            return $result;
     
        }
        /*
            下载文件或图片
        */
        function downloadFile($uuid,$shareSecret){
            $url=$this->url.'chatfiles/'.$uuid;
            $header = array("share-secret:".$shareSecret,"Accept:application/octet-stream",$this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            $filename = md5(time().mt_rand(10, 99)).".png"; //新图片名称
            if(!file_exists("resource/down")){
                //mkdir("../image/down");
                mkdir("resource/down/");
            }
     
            $file = @fopen("resource/down/".$filename,"w+");//打开文件准备写入
            @fwrite($file,$result);//写入
            fclose($file);//关闭
            return $filename;
     
        }
        /*
            下载图片缩略图
        */
        function downloadThumbnail($uuid,$shareSecret){
            $url=$this->url.'chatfiles/'.$uuid;
            $header = array("share-secret:".$shareSecret,"Accept:application/octet-stream",$this->getToken(),"thumbnail:true");
            $result=$this->postCurl($url,'',$header,'GET');
            $filename = md5(time().mt_rand(10, 99))."th.png"; //新图片名称
            if(!file_exists("resource/down")){
                //mkdir("../image/down");
                mkdir("resource/down/");
            }
     
            $file = @fopen("resource/down/".$filename,"w+");//打开文件准备写入
            @fwrite($file,$result);//写入
            fclose($file);//关闭
            return $filename;
        }
     
     
     
        //--------------------------------------------------------发送消息
        /*
            发送文本消息
            target_type:{users:给用户发消息,chatgroups:给群发消息,chatrooms:给聊天室发消息}
            target: {发送的目标；注意这里需要用数组，数组内添加的最大用户数默认 600 个，即使只有一个用户，也要用数组 [‘u1’]；给用户发送时数组元素是用户名，给群组发送时，数组元素是 groupid}
            content:发送的内容
        */
        function sendText($from="admin",$target_type,$target,$content){
            $url=$this->url.'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="txt";
            $options['msg']=$content;
            $body['msg']=$options;
            $body['from']=$from;
            // $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$b,$header);
            return $result;
        }
        /*
            发送透传消息
        */
        function sendCmd($from="admin",$target_type,$target,$action,$ext){
            $url=$this->url.'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="cmd";
            $options['action']=$action;
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());
            //$b=json_encode($body,true);
            $result=$this->postCurl($url,$b,$header);
            return $result;
        }
        /*
            发图片消息
        */
        function sendImage($filePath,$from="admin",$target_type,$target,$filename,$ext){
            $result=$this->uploadFile($filePath);
            $uri=$result['uri'];
            $uuid=$result['entities'][0]['uuid'];
            $shareSecret=$result['entities'][0]['share-secret'];
            $url=$this->url.'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="img";
            $options['url']=$uri.'/'.$uuid;
            $options['filename']=$filename;
            $options['secret']=$shareSecret;
            $options['size']=array(
                "width"=>480,
                "height"=>720
            );
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());
            //$b=json_encode($body,true);
            $result=$this->postCurl($url,$b,$header);
            return $result;
        }
        /*
            发语音消息
        */
        function sendAudio($filePath,$from="admin",$target_type,$target,$filename,$length,$ext){
            $result=$this->uploadFile($filePath);
            $uri=$result['uri'];
            $uuid=$result['entities'][0]['uuid'];
            $shareSecret=$result['entities'][0]['share-secret'];
            $url=$this->url.'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="audio";
            $options['url']=$uri.'/'.$uuid;
            $options['filename']=$filename;
            $options['length']=$length;
            $options['secret']=$shareSecret;
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());
            //$b=json_encode($body,true);
            $result=$this->postCurl($url,$b,$header);
            return $result;}
        /*
            发视频消息
        */
        function sendVedio($filePath,$from="admin",$target_type,$target,$filename,$length,$thumb,$thumb_secret,$ext){
            $result=$this->uploadFile($filePath);
            $uri=$result['uri'];
            $uuid=$result['entities'][0]['uuid'];
            $shareSecret=$result['entities'][0]['share-secret'];
            $url=$this->url.'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="video";
            $options['url']=$uri.'/'.$uuid;
            $options['filename']=$filename;
            $options['thumb']=$thumb;
            $options['length']=$length;
            $options['secret']=$shareSecret;
            $options['thumb_secret']=$thumb_secret;
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());
            //$b=json_encode($body,true);
            $result=$this->postCurl($url,$b,$header);
            return $result;
        }
        /*
        发文件消息
        */
        function sendFile($filePath,$from="admin",$target_type,$target,$filename,$length,$ext){
            $result=$this->uploadFile($filePath);
            $uri=$result['uri'];
            $uuid=$result['entities'][0]['uuid'];
            $shareSecret=$result['entities'][0]['share-secret'];
            $url=$GLOBALS['base_url'].'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="file";
            $options['url']=$uri.'/'.$uuid;
            $options['filename']=$filename;
            $options['length']=$length;
            $options['secret']=$shareSecret;
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());
            //$b=json_encode($body,true);
            $result=$this->postCurl($url,$b,$header);
            return $result;
        }
        //-------------------------------------------------------------群组操作
     
        /*
            获取app中的所有群组----不分页
        */
        function getGroups($limit=0){
            if(!empty($limit)){
                $url=$this->url.'chatgroups?limit='.$limit;
            }else{
                $url=$this->url.'chatgroups';
            }
     
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            return $result;
        }
        /*
            获取app中的所有群组---分页
        */
        function getGroupsForPage($limit=0,$cursor=''){
            $url=$this->url.'chatgroups?limit='.$limit.'&cursor='.$cursor;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
     
            if(!empty($result["cursor"])){
                $cursor=$result["cursor"];
                $this->writeCursor("groupfile.txt",$cursor);
            }
            //var_dump($GLOBALS['cursor'].'00000000000000');
            return $result;
        }
        /*
            获取一个或多个群组的详情
        */
        function getGroupDetail(){
            $param = $this->request->param();
            $g_ids=implode(',',$param);
            $url=$this->url.'chatgroups/'.$g_ids;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            $this->success("获取成功",$result);
        }
        /*
            创建一个群组
        */
        function createGroup(){
            /*
            groupname 群组名称
            avatar 群组头像的 URL
            description 群组描述
            public 是否是公开群 true：公开群  false：私有群  公开群可以被搜索到，用户可以申请加入公开群；私有群无法被搜索到，因此需要群主或群管理员添加，用户才可以加入
            maxusers  群组最大成员数（包括群主）该参数的默认值为 200
            allowinvites  是否允许普通群成员邀请用户加入群组 - true：普通群成员可拉人入群; （默认）false：只有群主和群管理员才能拉人入群。
            owner 群主的用户 ID。
            */
  
            $param = $this->request->param();
            $param["members"] = [
                "zs",
                "lisi2"
            ];
            $param["public"] = true;
            $url=$this->url.'chatgroups';
            $header=array($this->getToken());
            $body=json_encode($param);
            $result=$this->postCurl($url,$body,$header);
            $this->success("创建成功",$result);
            //dump($result);die;
           // return $result;
        }
        /*
            修改群组信息
        */
        function modifyGroupInfo($group_id,$options){
            $url=$this->url.'chatgroups/'.$group_id;
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'PUT');
            return $result;
        }
        /*
            删除群组
        */
        function deleteGroup($group_id){
            $url=$this->url.'chatgroups/'.$group_id;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            获取群组中的成员
        */
        function getGroupUsers(){
            $param = $this->request->param();
            $url=$this->url.'chatgroups/'.$param["group_id"].'/users';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            $this->success("获取成功",$result);
        }
        /*
            群组单个加人
        */
        function addGroupMember(){
            $param = $this->request->param();
            $url=$this->url.'chatgroups/'.$param["group_id"].'/users/'.$param["username"];
            $header=array($this->getToken(),'Content-Type:application/json');
            $result=$this->postCurl($url,'',$header);
            $this->success("添加成功",$result);
        }
        /*
            群组批量加人
        */
        function addGroupMembers($group_id,$usernames){
            $url=$this->url.'chatgroups/'.$group_id.'/users';
            $body=json_encode($usernames);
            $header=array($this->getToken(),'Content-Type:application/json');
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            群组单个减人
        */
        function deleteGroupMember(){
            $param = $this->request->param();
            $url=$this->url.'chatgroups/'.$param["group_id"].'/users/'.$param["username"];
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            $this->success("删除成功",$result);
        }
        /*
            群组批量减人
        */
        function deleteGroupMembers($group_id,$usernames){
            $url=$this->url.'chatgroups/'.$group_id.'/users/'.$usernames;
            //$body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            获取一个用户参与的所有群组
        */
        function getGroupsForUser(){
            $param = $this->request->param();
            $url=$this->url.'users/'.$param["username"].'/joined_chatgroups';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            $this->success("获取成功",$result);
        }
        /*
            群组转让
        */
        function changeGroupOwner($group_id,$options){
            $url=$this->url.'chatgroups/'.$group_id;
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'PUT');
            return $result;
        }
        /*
            查询一个群组黑名单用户名列表
        */
        function getGroupBlackList($group_id){
            $url=$this->url.'chatgroups/'.$group_id.'/blocks/users';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        /*
            群组黑名单单个加人
        */
        function addGroupBlackMember($group_id,$username){
            $url=$this->url.'chatgroups/'.$group_id.'/blocks/users/'.$username;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header);
            return $result;
        }
        /*
            群组黑名单批量加人
        */
        function addGroupBlackMembers($group_id,$usernames){
            $url=$this->url.'chatgroups/'.$group_id.'/blocks/users';
            $body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            群组黑名单单个减人
        */
        function deleteGroupBlackMember($group_id,$username){
            $url=$this->url.'chatgroups/'.$group_id.'/blocks/users/'.$username;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            群组黑名单批量减人
        */
        function deleteGroupBlackMembers($group_id,$usernames){
            $url=$this->url.'chatgroups/'.$group_id.'/blocks/users';
            $body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'DELETE');
            return $result;
        }
        //-------------------------------------------------------------聊天室操作
        /*
            创建聊天室
        */
        function createChatRoom($options){
            $url=$this->url.'chatrooms';
            $header=array($this->getToken());
            $body=json_encode($options);
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            修改聊天室信息
        */
        function modifyChatRoom($chatroom_id,$options){
            $url=$this->url.'chatrooms/'.$chatroom_id;
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'PUT');
            return $result;
        }
        /*
            删除聊天室
        */
        function deleteChatRoom($chatroom_id){
            $url=$this->url.'chatrooms/'.$chatroom_id;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            获取app中所有的聊天室
        */
        function getChatRooms(){
            $url=$this->url.'chatrooms';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            return $result;
        }
     
        /*
            获取一个聊天室的详情
        */
        function getChatRoomDetail($chatroom_id){
            $url=$this->url.'chatrooms/'.$chatroom_id;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        /*
            获取一个用户加入的所有聊天室
        */
        function getChatRoomJoined($username){
            $url=$this->url.'users/'.$username.'/joined_chatrooms';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        /*
            聊天室单个成员添加
        */
        function addChatRoomMember($chatroom_id,$username){
            $url=$this->url.'chatrooms/'.$chatroom_id.'/users/'.$username;
            //$header=array($this->getToken());
            $header=array($this->getToken(),'Content-Type:application/json');
            $result=$this->postCurl($url,'',$header);
            return $result;
        }
        /*
            聊天室批量成员添加
        */
        function addChatRoomMembers($chatroom_id,$usernames){
            $url=$this->url.'chatrooms/'.$chatroom_id.'/users';
            $body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            聊天室单个成员删除
        */
        function deleteChatRoomMember($chatroom_id,$username){
            $url=$this->url.'chatrooms/'.$chatroom_id.'/users/'.$username;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            聊天室批量成员删除
        */
        function deleteChatRoomMembers($chatroom_id,$usernames){
            $url=$this->url.'chatrooms/'.$chatroom_id.'/users/'.$usernames;
            //$body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        //-------------------------------------------------------------聊天记录
     
        /*
            导出聊天记录----不分页
        */
        function getChatRecord($ql){
            if(!empty($ql)){
                $url=$this->url.'chatmessages?ql='.$ql;
            }else{
                $url=$this->url.'chatmessages';
            }
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            return $result;
        }
        /*
            导出聊天记录---分页
        */
        function getChatRecordForPage($ql,$limit=0,$cursor){
            if(!empty($ql)){
                $url=$this->url.'chatmessages?ql='.$ql.'&limit='.$limit.'&cursor='.$cursor;
            }
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            $cursor=$result["cursor"];
            $this->writeCursor("chatfile.txt",$cursor);
            //var_dump($GLOBALS['cursor'].'00000000000000');
            return $result;
        }
     
        /**
         *$this->postCurl方法
         */
        function postCurl($url,$body,$header,$type="POST"){
            //1.创建一个curl资源
            $ch = curl_init();
            //2.设置URL和相应的选项
            curl_setopt($ch,CURLOPT_URL,$url);//设置url
            //1)设置请求头
            //array_push($header, 'Accept:application/json');
            //array_push($header,'Content-Type:application/json');
            //array_push($header, 'http:multipart/form-data');
            //设置为false,只会获得响应的正文(true的话会连响应头一并获取到)
            curl_setopt($ch,CURLOPT_HEADER,0);
            curl_setopt ( $ch, CURLOPT_TIMEOUT,5); // 设置超时限制防止死循环
            //设置发起连接前的等待时间，如果设置为0，则无限等待。
            curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
            //将curl_exec()获取的信息以文件流的形式返回，而不是直接输出。
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            //2)设备请求体
            if ($body) {
                //$b=json_encode($body,true);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $body);//全部数据使用HTTP协议中的"POST"操作来发送。
            }
            //设置请求头
            if(count($header)>0){
                curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
            }
            //上传文件相关设置
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 对认证证书来源的检查
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);// 从证书中检查SSL加密算
     
            //3)设置提交方式
            switch($type){
                case "GET":
                    curl_setopt($ch,CURLOPT_HTTPGET,true);
                    break;
                case "POST":
                    curl_setopt($ch,CURLOPT_POST,true);
                    break;
                case "PUT"://使用一个自定义的请求信息来代替"GET"或"HEAD"作为HTTP请求。这对于执行"DELETE" 或者其他更隐蔽的HTT
                    curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"PUT");
                    break;
                case "DELETE":
                    curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"DELETE");
                    break;
            }
     
     
            //4)在HTTP请求中包含一个"User-Agent: "头的字符串。-----必设
     
            curl_setopt($ch, CURLOPT_USERAGENT, 'SSTS Browser/1.0');
            curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
     
            curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)' ); // 模拟用户使用的浏览器
            //5)
     
     
            //3.抓取URL并把它传递给浏览器
            $res=curl_exec($ch);
     
            $result=json_decode($res,true);
            //4.关闭curl资源，并且释放系统资源
            curl_close($ch);
            if(empty($result))
                return $res;
            else
                return $result;
  
    }
    


















     

     

    
 
   
}
